﻿//MyTrade.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.BusinessEntities
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Runtime.Serialization;
	using System.Xml.Serialization;

	using Ecng.Common;
	using Ecng.ComponentModel;
	using Ecng.Serialization;

	using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;

	/// <summary>
	/// Собственная сделка.
	/// </summary>
	[Serializable]
	[System.Runtime.Serialization.DataContract]
	[DisplayName("Собственная сделка")]
	[Description("Информация о собственной сделке.")]
	public class MyTrade : NotifiableObject, IExtendableEntity
	{
		/// <summary>
		/// Создать <see cref="MyTrade"/>.
		/// </summary>
		public MyTrade()
		{
		}

		/// <summary>
		/// Заявка, по которой совершена сделка.
		/// </summary>
		[DataMember]
		[RelationSingle]
		[ExpandableObject]
		[DisplayName("Заявка")]
		[Description("Заявка, по которой совершена сделка.")]
		[Category("Основные")]
		[PropertyOrder(0)]
		public Order Order { get; set; }

		/// <summary>
		/// Информация о сделке.
		/// </summary>
		[DataMember]
		[RelationSingle]
		[ExpandableObject]
		[DisplayName("Сделка")]
		[Description("Информация о сделке.")]
		[Category("Основные")]
		[PropertyOrder(1)]
		public Trade Trade { get; set; }

		/// <summary>
		/// Задержка в получении информации о сделке.
		/// </summary>
		[DataMember]
		[Ignore]
		[DisplayName("Задержка")]
		[Description("Задержка в получении информации о сделке.")]
		[Category("Статистика")]
		[PropertyOrder(0)]
		public TimeSpan Latency { get; set; }

		[field: NonSerialized]
		private IDictionary<object, object> _extensionInfo;

		/// <summary>
		/// Расширенная информация по собственной сделке.
		/// </summary>
		/// <remarks>
		/// Необходима в случае хранения в программе дополнительной информации, ассоциированной с собственной сделкой.
		/// Например, размер комиссии, валюту, тип сделки.
		/// </remarks>
		[Ignore]
		[XmlIgnore]
		[DisplayName("Расширенная информация")]
		[Description("Необходима в случае хранения в программе дополнительной информации, ассоциированной с инструментом.")]
		[Category("Основные")]
		[PropertyOrder(2)]
		public IDictionary<object, object> ExtensionInfo
		{
			get { return _extensionInfo; }
			set { _extensionInfo = value; }
		}

		/// <summary>
		/// Получить строковое представление.
		/// </summary>
		/// <returns>Строковое представление.</returns>
		public override string ToString()
		{
			return "{0} от заявки {1}".Put(Trade, Order);
		}
	}
}